package main

import (
	"fmt"
	"reflect"
)

type inner struct {
	ID   int
	Name string
}

func (s inner) Tostring() string {
	fmt.Printf("type s: %v; val s: %v", reflect.TypeOf(s), reflect.ValueOf(s))
	return fmt.Sprintf("ID: %d, Name: %s", s.ID, s.GetName())
}

func (s *inner) GetName() string {
	return s.Name
}

// func (s *outer) Tostring() string {
// 	return fmt.Sprintf("ID: %d, Name: %s", s.ID, s.Name)
// }

type outer struct {
	inner
	ID int
	// Name string
}

func main() {
	// a := &inner{
	// 	ID:   1,
	// 	Name: "1",
	// }
	b := &outer{
		ID: 100,
		// Name:  "100",
		inner: *new(inner),
	}
	fmt.Println(b.Tostring())
}
